package com.ddxz.hospital.mapper;

import com.ddxz.hospital.dto.PatientSearch;
import com.ddxz.hospital.entity.*;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/9/23
 */

@Mapper
@Repository
public interface InputMapper {
    /**
     * 保存病人信息
     * @param domain 病人信息
     * @return 是否保存成功
     */
    Integer savePatient(@Param("pd") PatientEntity domain);

    /**
     * 修改病人信息
     * @param domain 病人信息
     * @return 是否修改成功
     */
    Integer modifyPatient(@Param("pd") PatientEntity domain);

    /**
     * 修改治理信息
     * @param indicate 治理信息
     * @return 是否修改成功
     */
    Integer modifyIndicate(@Param("id") IndicateEntity indicate);

    /**
     * 修改住院信息
     * @param entity 住院信息
     * @return 是否修改成功
     */
    Integer modifyConsult(@Param("cd")ConsultEntity entity);

    /**
     * 保存治疗信息
     * @param indicate 治疗信息
     * @return 是否保存成功
     */
    Integer saveIndicate(@Param("id") IndicateEntity indicate);

    /**
     * 保存住院信息
     * @param entity 住院信息
     * @return 是否保存成功
     */
    Integer saveConsult(@Param("cd") ConsultEntity entity);

    /**
     * 保存随访信息
     * @param entity 随访信息
     * @return 是否保存成功
     */
    Integer saveCourse(@Param("cd") CourseEntity entity);

    /**
     * 修改随访信息
     * @param entity 随访信息
     * @return 是否修改成功
     */
    Integer modifyCourse(@Param("cd") CourseEntity entity);

    /**
     * 获取病人详情
     * @param patientId 病人标识
     * @return 病人详情
     */
    PatientEntity getPatientDetail(@Param("pid")String patientId);

    /**
     * 获取治理信息
     * @param consultId 治理标识
     * @return 治理信息
     */
    IndicateEntity getIndicateDetail(@Param("cid") String consultId);

    /**
     * 获取住院详情
     * @param consultId 住院标识
     * @return 住院详情
     */
    ConsultEntity getConsultDetail(@Param("cid") String consultId);

    /**
     * 获取随访详情
     * @param courseId 随访标识
     * @return 随访详情
     */
    CourseEntity getCourseDetail(@Param("cid") String courseId);

    /**
     * 获取病人清单
     * @param name 病人姓名
     * @param phone 联系电话
     * @return 病人清单
     */
    Page<PatientSearch> getPatientList(@Param("name")String name, @Param("phone") String phone);

    /**
     * 已作废
     * @param name 病人姓名
     * @param phone 联系电话
     * @return 病人数量
     */
    Integer getPatientNum(@Param("name") String name, @Param("phone")  String phone);

    /**
     * 病人治疗清单
     * @param patientId 病人标识
     * @param type 类型
     * @param beginDate 开始日期
     * @param endDate 结束日志
     * @return 治疗清单
     */
    Page<CureEntity> getCureList(@Param("pid")String patientId, @Param("type") Integer type, @Param("bd") String beginDate, @Param("ed") String endDate);

    /**
     * 获取病人的治疗标识清单
     * @param patientId 病人标识
     * @return 治疗标识清单
     */
    List<String> getCureIds(@Param("pid") String patientId);

    /**
     * 移除病人信息
     * @param patientId 病人标识
     * @return 是否移除成功
     */
    Integer removePatient(@Param("pid") String patientId);

    /**
     * 移除治疗信息
     * @param cids 治疗标识清单
     * @return 是否移除成功
     */
    Integer removeIndicates(@Param("cids") List<String> cids);

    /**
     * 移除住院信息
     * @param cids 住院标识清单
     * @return 是否移除成功
     */
    Integer removeConsults(@Param("cids") List<String> cids);

    /**
     * 移除随访信息
     * @param cids 随访标识清单
     * @return 是否移除成功
     */
    Integer removeCourses(@Param("cids") List<String> cids);

    /**
     * 移除指定的治疗信息
     * @param curId 治疗标识
     * @return 是否移除成功
     */
    Integer removeIndicate(@Param("cid")String curId);

    /**
     * 移除住院信息
     * @param curId 住院信息标识
     * @return 是否移除成功
     */
    Integer removeConsult(@Param("cid")String curId);

    /**
     * 移除随访信息
     * @param curId 随访信息标识
     * @return 是否移除成功
     */
    Integer removeCourse(@Param("cid")String curId);

    /**
     * 获取同年同月同日生的同名人数
     * @param desc 描述
     * @param format 格式
     * @param hospitalNo 住院号
     * @return 人数
     */
    Integer getPatientNumByNameBirthday(@Param("name") String desc, @Param("birthday") String format, @Param("hid") String hospitalNo);

    /**
     * 根据住院号获取病人标识
     * @param hospitalized 住院号
     * @return 病人标识
     */
    String getPatientIdByHospitalNo(@Param("hid") String hospitalized);
}
